using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace FiltronASP.Models.DAO.Interfaces
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>variable_values</code>.
    /// </summary>
    public interface IVariableValueDAO : IGenericDAO<VariableValue, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie listy obiektów na podstawie strony.
        /// </summary>
        /// <param name="pageId">strona</param>
        /// <returns>Lista rekordów o zadanej stronie</returns>
        IQueryable<VariableValue> FindByPage(int pageId);


        /// <summary>
        /// Usuwanie obiektów na podstawie strony.
        /// </summary>
        /// <param name="pageId">strona</param>
        /// <returns>true w przypadku usunięcia, false w przypadku nie odnalezienia rekordów</returns>
        bool DeleteByPage(int pageId);

        /// <summary>
        /// Pobieranie obiektu na podstawie zmiennej i strony.
        /// </summary>
        /// <param name="variableId">zmienna</param>
        /// <param name="pageId">strona</param>
        /// <returns>Lista rekordów o zadanej zmiennej i stronie</returns>
        VariableValue FindByVariableAndPage(int variableId, int pageId);

        /// <summary>
        /// Pobieranie obiektu na podstawie nazwy zmiennej i strony.
        /// </summary>
        /// <param name="variableName">nazwa zmiennej</param>
        /// <param name="pageId">strona</param>
        /// <returns>Lista rekordów o zadanej nazwie zmiennej i stronie</returns>
        VariableValue FindByVariableAndPage(string variableName, int pageId);

        /// <summary>
        /// Pobieranie obiektu na podstawie nazwy zmiennej i strony.
        /// </summary>
        /// <param name="variableName">nazwa zmiennej</param>
        /// <param name="pageId">strona</param>
        /// <returns>Lista rekordów o zadanej nazwie zmiennej i stronie</returns>
        VariableValue FindByVariableAndPage(string variableName, int pageId, int languageId);

        /// <summary>
        /// Pobieranie listy obiektów na podstawie języka.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <returns>Lista rekordów o zadanym języku</returns>
        IQueryable<VariableValue> FindByLanguage(int languageId);

        /// <summary>
        /// Wstawianie listy obiektów na podstawie jezyka.
        /// </summary>
        /// <param name="defaultLanguageId">domyslny jezyk</param>
        /// <param name="newLanguageId">nowy jezyk</param>
        /// <returns>true jesli sie udalo, false wpp</returns>
        bool InsertForNewLanguage(int defaultLanguageId, int newLanguageId);

        /// <summary>
        /// Usuwanie obiektow po jezyku.
        /// </summary>
        /// <param name="languageId">jezyk</param>
        /// <returns>true dla sukcesu, false w przeciwnym razie</returns>
        bool DeleteByLanguage(int languageId);

        IQueryable<VariableValue> FindByVariableId(int variableId);
    }
}
